Integrated circuit (IC) design can involve a large number of complex stages, including designing the logical circuit design to perform desired functions and designing the physical layout of the chip to meet performance, manufacturability, and other criteria. For example, design for manufacturability can involve a “fill” process, whereby polygons are added to the physical design to help ensure that the various layers of the chip meet certain density specifications (e.g., metal density, density gradient, etc.) for reliable manufacturability (not for logical functionality). As circuits and chip layouts become more complex and foundry processes support smaller features, the fill process can become increasingly complex.
A number of automated techniques are available for adding fill to the physical layout of an IC. Some such automated fill approaches can fill unused regions of the geometric IC layout with polygons and stream out the result in a predefined, foundry-compliant format (e.g., often the Graphic Data System (GDS) or GDSII format). The fill approaches can attempt to meet defined fill rules, but more simplistic approaches can be ineffective in complex designs and do not tend to account for a potential impact of the fill on other constraints (e.g., the underlying circuit design). Other, more complex fill approaches (e.g., model-based fill approaches) can include integrated, concurrent analysis functions that tend to more fully adhere to a variety of constraints. For example, some smarter fill approaches can produce complex fills with multiple shapes and sizes (e.g., including multi-layer shapes), while minimizing the number of polygons used in the fill by concurrently analyzing metal densities and dynamically adjusting the fill accordingly.
As the fills become more complex, the fill output files tend to increase in size and complexity, with increasing numbers of complicated fill shapes and layouts. Large numbers of fill polygons can interfere with the design process in a number of ways. For example, they can be difficult or inconvenient to maintain in a database, can clutter layout designs, and can be particularly cumbersome in environments where multiple users are working on different blocks of a larger design with hierarchical relationships among the blocks.